在資料庫設計中經常會碰到的情境
新增/維護主資料與關連資料
建立一筆訂單
新增訂購人/出貨資訊(一)與商品清單(多)
建立使用者
新增使用者(一)與隸屬群組(多)
建立商品資料
新增商品資料(一)與所屬分類(多)
若使用 EntityFramework 的話可能會撰寫程式碼如下
using(DbContext _context = new DbContext())
{
	int _identity = Order.Create( ... );
	OrderDetail.Create(_identity, items);
	
	...
	
	_context.SaveChange();
}
若今天要由資料庫人員建立物件給 .NET 開發人員呼叫的話
就會遇到下列問題
如何在一次的 StoredProc 呼叫中存取一對多的資料內容
使用「使用者定義資料表參數」函數 User-Defined Table-Valued Parameter
就可在 StoreProc 物件中依次傳遞多筆資料列
範例程式碼片段如下
CREATE TYPE [Order].[OrderItems]
	AS TABLE
(
	[ProductId]		INT,
	[SellPrice]		SMALLMONEY,
	[Quantity]		DECIMAL(13,3)
)
CREATE PROC [Order].[AddOrder]
	@OrderName		NVARCHAR(50)
	@Items			[Order].[OrderItems] READONLY
AS
	...
	--實作儲存訂單的方法
	
	INSERT INTO [Order].[OrderDetails] (
		... Columns ...
	) SELECT 
		... Columns
	FROM @Items
	...
GO
請注意 REAONLY 代表在 StoredProc 片段中此參數內容是無法變更的
此為必須設定之項目
ADO.NET 需要將 DataTable 物件儲存 SqlParameter 物件中才可進行呼叫
透過此方式 .NET 開發人員就可以透過呼叫 StoredProc 新增一對多關係資料
資料庫開發人員也可以透過修改此 StoredProc 進行日後維護作業